<?php
	
	//obsluga danych z zadania klienta

	class CRequest
	{	
		//zwraca typ zadania - GET, POST
		static function Type()
		{
			if(isset($_SERVER['REQUEST_METHOD']))
			{
				return $_SERVER['REQUEST_METHOD'];
			}
			
			return '';
		}

		//zwraca IP uzytkownika ktory wyslal request'a
		static function GetUserIp()
		{
			if(isset($_SERVER['REMOTE_ADDR']))
			{
				return $_SERVER['REMOTE_ADDR'];
			}
	
			return '';
		}
		
		//pobiera ip uzytkownika i zwraca jako int'a
		static function GetUserIpAsLong()
		{
			if(isset($_SERVER['REMOTE_ADDR']))
			{
				return ip2long($_SERVER['REMOTE_ADDR']);
			}
			
			return 0;
		}
		
		//pobiera informacje o przegladarce uzytkownika
		static function GetUserAgent()
		{
			if(isset($_SERVER['HTTP_USER_AGENT']))
			{
				return substr($_SERVER['HTTP_USER_AGENT'],0,intval(USER_AGENT_MAX));
			}
			
			return '';
		}
		
		//pobiera informacje skad przyszedl uzytkownik
		static function GetReferrer()
		{
			if(isset($_SERVER['HTTP_USER_AGENT']))
			{
				return substr($_SERVER['HTTP_USER_AGENT'],0,intval(USER_AGENT_LANG));
			}
			
			return '';
		}

		//jaki zestaw znakow akceptuje klient
		static function GetCharset()
		{
			if(isset($_SERVER['HTTP_ACCEPT_CHARSET']))
			{
				return substr($_SERVER['HTTP_ACCEPT_CHARSET'],0,intval(USER_AGENT_CHARSET));
			}
			
			return  '';
		}
		
		//sprawdza jakie kodowanie akceptuje klient
		static function GetAcceptedEncoding()
		{
			if(isset($_SERVER['HTTP_ACCEPT_ENCODING']))
			{
				return substr($_SERVER['HTTP_ACCEPT_ENCODING'],0,intval(USER_AGENT_ENCODING));
			}
			
			return '';
		}
		
		//pobiera jezyk z przegladarki
		static function GetLanguage()
		{
			if( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) )
			{
				$szLang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
				
				$szLang = substr($szLang,0,2);
				
				return strtoupper($szLang);
			}
			
			return '';
		}
		
		//sprawdza czy polaczenie dziala w trbie ssl
		static function IsSSL()
		{
			if( isset($_SERVER['https']) && $_SERVER['https'] == 1) 
			{
     			return true;
  			} 
  			else if( isset($_SERVER['https']) && $_SERVER['https'] == 'on') 
  			{
     			return true;
  			} 
  			else if( isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) 
  			{
     			return true;
  			} 
  			
  			return false;
		}
		
		static function ForceSSL()
		{
			$szUrl = 'https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
			header('Location: '.$szUrl);
		}
		
		//zwraca adres żądania klienta
		static function GetRequestedUrl()
		{
			if(isset($_SERVER['REQUEST_URI']))
			{
				return substr($_SERVER['REQUEST_URI'],0,intval(MAX_URL_LEN));
			}
	
			return '';
		}
	
		//zwraca adres zadania klienta jako tablica asocjacyjna
		static function GetRequestedUrlAsArray()
		{
			$szUrlSeparator = "/";
			$szUrlSuffix    = ".xml";
			
			if(!isset($_SERVER['PATH_INFO']))
				return false;

			$szHttpQuery = $_SERVER['PATH_INFO'];

			//stary sposob obcinania niedozwolonych znakow
			//$szHttpQuery = preg_replace("/[^A-Za-z0-9\.\,\\".$szUrlSeparator."\-\_]/s",'',$szHttpQuery);
			
			//dopuszczamy tylko znaki utf8
			$szHttpQuery = urldecode($szHttpQuery);			
			$szHttpQuery = preg_replace('/^([[:alpha:]])*$/u','',$szHttpQuery);
			
				
			$szHttpQuery = substr($szHttpQuery,0,intval(MAX_QUERY_LEN));
			$szHttpQuery = strtolower($szHttpQuery);
			
			
			if(empty($szHttpQuery))
				return false;
				
			trim($szHttpQuery,' '.$szUrlSeparator);
							
			if(substr($szHttpQuery,-strlen($szUrlSuffix)) == $szUrlSuffix)
			{
				$szHttpQuery = substr($szHttpQuery,0,-strlen($szUrlSuffix));	
			}
			
			$szUrlArray = explode($szUrlSeparator,$szHttpQuery);
			array_shift($szUrlArray);
			
			return $szUrlArray;
		}
		
		//zwraca adres zadania klienta jako tablica asocjacyjna
		static function GetRequestedUrlAsArray2(&$aModules = array(), &$aParams = array() )
		{
			$szModSep   = '/';
			$szParamSep = ',';
			
			if(!isset($_SERVER['PATH_INFO']))
				return false;
				
			$szHttpQuery = $_SERVER['PATH_INFO'];
			
			$szHttpQuery = urldecode($szHttpQuery);
			//$szHttpQuery = preg_replace('/^([[:alpha:]])*$/u','',$szHttpQuery);
			
			$szHttpQuery = substr($szHttpQuery,0,intval(MAX_QUERY_LEN));
			$szHttpQuery = strtolower($szHttpQuery);
			
			if(empty($szHttpQuery))
				return false;
				
			//adres dzielimy na czesci separatora
			$aTempMod = explode($szModSep,$szHttpQuery);
			array_shift($aTempMod);
				
			//szukamy celem odnalezienia separatora parametrow
			foreach($aTempMod as $szKey => &$szVal)
			{
				//czy znalezlismy separator parametrow
				if(strpos($szVal,$szParamSep))
				{
					$aTempParams = explode($szParamSep,$szVal);
					$aParams = array_merge((array)$aParams,(array)$aTempParams);
					 
					continue;
				}
				
				$aModules[] = $szVal;
			}
			
			return true;
		}
		
	}

?>